/**
 *
 */
package com.hz.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author Administrator
 * @date 2018年6月20日 下午2:44:48
 * 
 */
public class JdbcUtil {
	
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("加载驱动成功。。。");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}	
	}
	
	private final static String JDBC_URL = PropsUtils.getProps("jdbc.url");
	private final static String JDBC_USER = PropsUtils.getProps("jdbc.user");
	private final static String JDBC_PASSWORD = PropsUtils.getProps("jdbc.password");
	
	
	/**
	 * 获取数据库连接
	 * @return
	 * @throws SQLException
	 */
	private static Connection getConnection() throws SQLException {
		//2 获取数据库连接connnection
		Connection conn = DriverManager.getConnection(JDBC_URL, 
				JDBC_USER, JDBC_PASSWORD);
		System.out.println("获取数据库连接成功。。。");
		return conn;
	}
	
	/**
	 * 释放连接
	 * @param conn
	 * @param statement
	 * @throws SQLException 
	 */
	private static void release(Connection conn ,Statement statement) throws SQLException {
		if(statement != null) {
			statement.close();
		}
		if(conn != null) {
			conn.close();
		}
	}
	
	
	
	/**
	 * 执行新增，修改，删除的操作方法
	 * @param sql 需要执行的sql语句
	 * @throws SQLException
	 */
	public static void  excute(String sql) throws SQLException {
		Connection conn = getConnection();
		Statement statement = conn.createStatement();
		try {
			statement.execute(sql);
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			//关闭连接
			release(conn, statement);
		}
		
		
	}
	
	/**
	 * 执行查询等语句 返回list集合
	 * @param sql
	 * @return
	 * @throws SQLException 
	 */
	public static List<Map> excuteQuery(String sql) throws SQLException {
		Connection conn = getConnection();
		Statement statement = conn.createStatement();
		ResultSet result = statement.executeQuery(sql);
		//获取数据集的元信息
		ResultSetMetaData metaData = result.getMetaData();
		//获取记录一共有多少列
		int count = metaData.getColumnCount();
		List<Map> resultLists = new ArrayList<Map>();
		//遍历每一行的数据
		while(result.next()) {
			//遍历每一列的数据
			Map map = new HashMap<>();
			for(int i = 1 ; i<= count ;i++ ) {
				map.put(metaData.getColumnLabel(i), result.getString(i));
			}
//			把每一行的数据放到list集合中去
			resultLists.add(map);
		}
		//关闭连接
		release(conn, statement);
		return resultLists;
	}
	
	
	
	
	
}
